iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
佛心分享-IT 人自學之術

ASP.NET Core 30日成長路系列 第 9

Day9:如何利用Controller傳遞資料

  • 分享至 

  • xImage
  •  

如何利用Controller傳遞資料


Controller傳遞資料給View的四種途徑

在MVC 架構之下Model、View、Controller分別為獨立的個體,因此若Controller若要把資料傳送給View需要透過MVC內建的傳遞機制來進行傳送,例如:ViewData、ViewBag、Model、TempData。
那接下來就來分別介紹這四種傳遞方式的特性及限制吧~
https://ithelp.ithome.com.tw/upload/images/20240923/20167550JPJmcvlQbF.png

補充說明📄
1.ViewData、ViewBag、Model表面上是三個不同個體,但實際上都是儲存在ViewData這個實例中。
2.ViewData、ViewBag、Model的資料僅存在當前的Request中,一旦轉向資料就會清空。
3.ViewDataDictionary和ITempDataDictionary都繼承了相同介面,但唯一的不同就是ITempDataDictionary的資料儲存在Cookie或Session中,轉向後資料不會遺失。

以ViewData傳遞資料
是Key與Value成對的Dictionary,資料可為任何類型。

補充說明📄
1.因ViewDataDictionary繼承IDictionary<string,object>緣故,資料可以用object的型別加入ViewDataDictionary中,故ViewData可儲存任意型別之資料。
2.資料使用需做轉型(Stirng型別除外)
3.網頁轉向,ViewData資料會被清空

以ViewBag傳遞資料
ViewBag是dynamic型別的Property,可動態新增無限多個屬性,指派之Value可為任何型別。

補充說明📄
ViewBag與ViewData可合併使用,但Key與屬性名字需錯開
ViewBag資料不需轉型
ViewBag能動態加入屬性,是因為它是DynamicViewData型別物件,繼承DynamicObject類別,並實作TryGetMember和TrySetMember方法,故能動態設定讀取屬性。\

以Model傳遞資料
若要指定Model物件時有兩種方法
1.呼叫View()方法時直接將Model當作參數傳入
2.將model物件指定給ViewData.Model屬性

以TempData傳遞資料
在不同Actions間傳遞資料須以TempData傳送。

補充說明📄
1.跨Actions傳送實際上就是網頁轉向,可以用TempData傳送是因為其儲存在Cookie或Session中。
2.使用時須做轉型別(String除外)
3.TempData資料可做防呆檢查,非強制性。

那麼以上就是今天的分享啦~
明天見啦~See YA(。•̀ᴗ-)


上一篇
Day8:Controller中的Action
下一篇
Day10:建立Model並產出View檢視
系列文
ASP.NET Core 30日成長路13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言